ScenarioController
The ScenarioController provides basic scenario management functionality for SWMM simulations, focusing on run properties and scenario metadata.
Overview
This controller handles scenario-related operations including retrieving run properties, latest completed runs, and scenario metadata. It serves as a simpler alternative to the more comprehensive ScenarioManagementController.
Data Sources
- Azure Table Storage:
Runstable for run metadata and properties
- Configuration:
appsettings.jsonfor connection string - No Blob Storage: Focuses on metadata only
Endpoints
GET /api/scenario/runproperties
Retrieves the latest completed run properties for a specific scenario.
Query Parameters:
scenario(string): Scenario name/identifier
Response:
- 200 OK: Returns
RunEntityobject - 404 Not Found: No completed runs found
- 500 Internal Server Error: Database error
Data Flow:
Query Filter:
PartitionKey eq '{partitionKey}' and Status eq 'RUN_IS_COMPLETE'
GET /api/scenario/latestrunproperties
Retrieves the latest completed run properties for the default scenario.
Response:
- 200 OK: Returns
RunEntityobject - 404 Not Found: No completed runs found
- 500 Internal Server Error: Database error
Data Flow:
Default Scenario: scenario0
GET /api/scenario/runs
Retrieves all run entities from the scenario table.
Response:
- 200 OK: Returns list of
RunEntityobjects - 500 Internal Server Error: Database error
Data Flow:
Azure Storage Details
Table Storage Schema
Runs Table:
- PartitionKey:
{clientPartitionKey}_{scenario} - RowKey:
{runDateTime}(formatted asyyyy-MM-ddTHH:mm:sszzz) - Properties:
EndTime: Simulation end timeFlooding: Total flooding volumeFlow: Total flow volumeInputFile: Input file nameReportingTimeStep: Time step in minutesStartTime: Simulation start timeStatus: Run statusTimestamp: Entity timestampETag: Entity tag for concurrency
Constants Used
CLIENT_INPUT_PARTITION_KEY: Base partition keyDEFAULT_SCENARIO_LIVE_RUN: Default scenario name (scenario0)DATE_TIME_FORMAT:yyyy-MM-ddTHH:mm:sszzzRUNS_TABLE:Runs
Data Models
RunEntity
public class RunEntity : ITableEntity
{
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public string EndTime { get; set; }
public double? Flooding { get; set; }
public double? Flow { get; set; }
public string InputFile { get; set; }
public int? ReportingTimeStep { get; set; }
public string StartTime { get; set; }
public string Status { get; set; }
public DateTimeOffset Timestamp { get; set; }
public ETag ETag { get; set; }
}
Configuration
Required Settings:
{
"Values": {
"CloudStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net"
}
}
Error Handling
- Database Errors: Returns null for missing data
- Query Errors: Graceful handling of table queries
- Parsing Errors: Handles malformed entity data
- Connection Issues: Returns null on storage errors
Performance Considerations
- Async Operations: Uses async/await for database operations
- Query Optimization: Filters by partition key and status
- Memory Management: Efficient entity conversion
- No Caching: Direct database queries
Dependencies
Azure.Data.TablesGqcStorage1.TableEntitiesMicrosoft.AspNetCore.Mvc
Usage Examples
Get Latest Run for Specific Scenario:
GET /api/scenario/runproperties?scenario=scenario1
Get Latest Run for Default Scenario:
GET /api/scenario/latestrunproperties
Get All Runs:
GET /api/scenario/runs
Response Examples
RunEntity Response:
{
"partitionKey": "client_scenario1",
"rowKey": "2023-11-16T00:00:00-05:00",
"endTime": "2023-11-16T23:59:59-05:00",
"flooding": 1250.5,
"flow": 45678.9,
"inputFile": "scenario1.inp",
"reportingTimeStep": 15,
"startTime": "2023-11-16T00:00:00-05:00",
"status": "RUN_IS_COMPLETE",
"timestamp": "2023-11-16T23:59:59-05:00",
"etag": "W/\"datetime'2023-11-16T23:59:59.1234567Z'\""
}
Limitations
- Basic Functionality: Limited compared to ScenarioManagementController
- No CRUD Operations: Read-only operations only
- No Validation: Minimal input validation
- No Error Details: Returns null on errors
- Synchronous: Some operations are synchronous
Comparison with ScenarioManagementController
| Feature | ScenarioController | ScenarioManagementController |
|---|---|---|
| CRUD Operations | Read-only | Full CRUD |
| Data Models | Basic entities | DTOs with validation |
| Error Handling | Basic | Comprehensive |
| Async Operations | Partial | Full async |
| Input Validation | None | Full validation |
| Statistics | None | Run statistics |
| Search | None | Scenario search |
Future Enhancements
- Async Operations: Convert to full async/await
- Error Handling: More detailed error responses
- Validation: Add input validation
- Caching: Implement result caching
- Pagination: Support for large result sets